package com.analyse.stock.utils;

import com.analyse.stock.enums.Sentiment;
import com.analyse.stock.vo.MarketSentimentVO;

public class MarketSentimentAnalyzer {

    // 分析市场情绪
    public static Sentiment analyzeSentiment(MarketSentimentVO data) {
        // 1. 涨跌家数比率
        double upDownRatio = (double) data.getUpCount() / (data.getDownCount() + 1);

        // 2. 成交量变化比率
        double AmtChangeRatio = (data.getPreviousAmt() > 0) ? (data.getTotalAmt() / data.getPreviousAmt()) : 1;

        // 3. 初始情绪评分
        int sentimentScore = 0;

        // 根据涨跌家数调整评分
        if (upDownRatio > 1.5) { // 上涨家数明显多
            sentimentScore += 2;
        } else if (upDownRatio < 0.67) { // 下跌家数明显多
            sentimentScore -= 2;
        }

        // 根据主力资金净流入调整评分
        if (data.getMainNetFlow() > 10) { // 主力资金大幅流入
            sentimentScore += 2;
        } else if (data.getMainNetFlow() < -10) { // 主力资金大幅流出
            sentimentScore -= 2;
        }

        // 根据成交量变化调整评分
        if (AmtChangeRatio > 1.2) { // 放量
            sentimentScore += 1;
        } else if (AmtChangeRatio < 0.8) { // 缩量
            sentimentScore -= 1;
        }

        // 根据评分判断情绪
        if (sentimentScore >= 3) {
            return Sentiment.POSITIVE; // 积极
        } else if (sentimentScore <= -3) {
            return Sentiment.NEGATIVE; // 消极
        } else {
            return Sentiment.NEUTRAL;  // 中性
        }
    }

    /**
     * 涨跌家数分析：
     * 涨跌家数之比大于 1.5：情绪明显偏积极。
     * 涨跌家数之比小于 0.67：情绪明显偏消极。
     *
     * 主力资金分析：
     * 主力资金流入大于 10 亿：情绪加分。
     * 主力资金流出小于 -10 亿：情绪扣分。
     *
     * 成交额变化分析：
     * 成交额相比前一日放量超过 20%：情绪加分。
     * 缩量超过 20%：情绪扣分。
     *
     * 情绪评分阈值：
     * 情绪评分≥3：市场情绪积极。
     * 情绪评分≤−3：市场情绪消极。
     * 其他情况：市场情绪中性。
     */
    public static void main(String[] args) {
        // 示例数据：上涨家数、下跌家数、主力净流入（亿）、当前成交额（亿）、昨日成交额（亿）
        MarketSentimentVO marketData = new MarketSentimentVO(1530,
                3699, -811.13, 16905, 14583);
        // 分析市场情绪
        Sentiment sentiment = analyzeSentiment(marketData);
        // 输出结果
        System.out.println("今日市场情绪：" + sentiment.getDesc());
    }
}

